package proto

import (
	"regexp"
	D "websocket_apn/define"
	"websocket_apn/log"
)

/*
71 AB 00 00 03 93 00 00 3D B9 00 00 02D4 07 01 81 E2
08 00 12 A8 02 08 01 10 01
                ID       类型    纵    横    状态        等级                         时间                      数量
1A 22 0A 0B 08 01    10 EB 07 18 24 20 12 28 03 12 13 08 01 10 00 18 00       20 C0 EB D0 CD A4 32 30 00 40 32 50 00 桃树
1A 25 0A 0C 08 E2 01 10 EC 07 18 23 20 14 28 03 12 15 08 07 10 01 18 87 B5 18 20 E7 82 93 DD A4 32 30 00 40 78 50 00 灵池
1A 22 0A 0B 08 0B    10 EA 07 18 20 20 16 28 03 12 13 08 07 10 01 18 00       20 A1 C8 93 DD A4 32 30 00 40 20 50 00 丹炉
1A 22 0A 0B 08 0A    10 E9 07 18 21 20 12 28 03 12 13 08 07 10 01 18 00       20 F0 D3 90 DD A4 32 30 00 40 00 50 00 灵草1
1A 22 0A 0B 08 03    10 E9 07 18 21 20 14 28 03 12 13 08 07 10 01 18 00       20 C7 B1 90 DD A4 32 30 00 40 00 50 00 灵草2
1A 23 0A 0C 08 E3 01 10 E9 07 18 1F 20 14 28 03 12 13 08 07 10 01 18 00       20 DB EF 84 DD A4 32 30 00 40 00 50 00 灵草3
1A 23 0A 0C 08 E4 01 10 E9 07 18 1F 20 12 28 03 12 13 08 07 10 01 18 00       20 BA F6 8B DD A4 32 30 00 40 00 50 00 灵草4
1A 0F 0A 0B 08 02    10 ED 07 18 1B 20 12 28 03 12 00 留言板
1A 10 0A 0C 08 E5 01 10 C0 17 18 19 20 14 28 03 12 00
12 04 08 02 10 01
12 04 08 03 10 01
12 04 08 04 10 01
12 04 08 05 10 01
12 04 08 06 10 01
20 07 2A 05 39 37 39 30 30
30 00 38 01 42 08 08 01 10 25 18 04 20 02
5A 06 08 D2 8C 01 10 02
5A 06 08 D6 8C 01 10 01
5A 06 08 D3 8C 01 10 02
5A 06 08 D4 8C 01 10 02
5A 06 08 D5 8C 01 10 02
5A 06 08 D1 8C 01 10 01
62 06 08 81 D0 02 10 02
62 06 08 82 D0 02 10 02
62 06 08 FE CF 02 10 02
62 06 08 FF CF 02 10 01
68 00
72 0A 08 C0 17 10 FE 88 B0 A4 AB 32
7A 0E 08 E2 83 86 B8 C0 5A 10 CD E5 08 18 97 4E 88 01 00

71 AB 00 00 04 B3 00 00 3D B9 00 00 02D4 07 01 81 E2 08 00
12 A1 02 08 01 10 01
1A 22 0A 0B 08 01 10 EB 07 18 24 20 12 28 03 12 13 08 01 10 00 18 00 20 CE A7 F0 A9 A5 32 30 00 40 32 50 00
1A 0F 0A 0B 08 02 10 ED 07 18 1B 20 12 28 03 12 00 1A 1E 0A 0C 08 E2 01 10 EC 07 18 23 20 14 28 03 12 0E 08 07 10 00 18 00 20 00 30 00 40 00 50 00
1A 22 0A 0B 08 03 10 E9 07 18 21 20 14 28 03 12 13 08 07 10 01 18 00 20 DF C4 F1 A9 A5 32 30 00 40 00 50 00 1A 23 0A 0C 08 E3 01 10 E9 07 18 1F 20 14 28 03 12 13 08 07 10 01 18 00 20AC CE F1 A9 A5 32 30 00 40 00 50 00 1A 23 0A 0C 08 E4 01 10 E9 07 18 1F 20 12 28 03 12 13 08 07 10 01 18 00 20 EC C9 F1 A9 A5 32 30 00 40 00 50 00 1A 10 0A 0C 08 E5 01 10 C0 17 18 19 20 14 28 03 12 00 1A 22 0A 0B 08 0A 10 E9 07 18 21 20 1228 03 12 13 08 07 10 01 18 00 20 B6 C7 F1 A9 A5 32 30 00 40 00 50 00 1A 22 0A 0B 08 0B 10 EA 07 18 20 20 16 28 03 12 13 08 07 10 01 18 00 20 D8 DE F1 A9 A5 32 30 00 40 38 50 00 12 04 08 02 10 01 12 04 08 03 10 01 12 04 08 04 10 01 1204 08 05 10 01 12 04 08 06 10 01 20 07 2A 05 39 39 36 30 30 30 00 38 01 42 08 08 01 10 2D 18 04 20 02 52 45 0A 3A 08 F4 FF E1 BA C0 5A 10 84 EB 06 1A 0E E4 BB 99 E6 A2 A6 C2 B7 E6 B6 85 E6 A7 83 20 AB 04 28 E1 E0 A5 CF 0C 38 CD E5 08 40 AFE6 BD 01 4A 00 50 00 60 D9 F4 08 70 00 78 95 4E 10 8F A2 AB A8 A5 32 18 00 52 CD 01 0A C1 01 08 9D BE DB BA C0 5A 10 A6 CB 08 1A 0E E4 BB 99 E6 A2 A6 C2 B7 E5 A4 A9 E8 93 AC 20 D3 04 28 BF 95 A7 92 16 38 A6 CB 08 40 AF E6 BD 01 4A 86 01 6874 74 70 73 3A 2F 2F 74 68 69 72 64 77 78 2E 71 6C 6F 67 6F 2E 63 6E 2F 6D 6D 6F 70 65 6E 2F 76 69 5F 33 32 2F 51 30 6A 34 54 77 47 54 66 54 49 64 52 7A 4A 36 35 43 4F 6D 38 68 61 79 6C 56 5A 69 63 36 46 35 39 38 69 61 52 4C 69 62 53 32 5738 38 7A 45 72 77 4C 62 56 73 72 69 62 30 67 5A 33 6A 68 34 66 69 63 34 54 67 59 6D 61 47 43 6F 6E 6D 55 50 31 6E 4B 51 32 45 30 38 57 78 69 63 67 2F 31 33 32 50 00 60 EC F4 08 70 00 78 94 4E 10 E6 E0 85 9A A5 32 18 01 5A 06 08 D2 8C 01 10 02 5A 06 08 D6 8C 01 10 01 5A 06 08 D3 8C 01 10 02 5A 06 08 D4 8C 01 10 02 5A 06 08 D5 8C 01 10 02 5A 06 08 D1 8C 01 10 01 5A 06 08 D8 8C 01 1001 62 06 08 81 D0 02 10 02 62 06 08 82 D0 02 10 02 62 06 08 91 C8 02 10 04 62 06 08 92 C8 02 10 03 62 06 08 93 C8 02 10 01 62 06 08 94 C8 02 10 05 62 06 08 95 C8 02 10 03 62 06 08 96 C8 02 10 04 62 06 08 97 C8 02 10 04 62 06 08 98 C8 02 1005 62 06 08 99 C8 02 10 03 62 06 08 9A C8 02 10 04 62 06 08 9B C8 02 10 05 62 06 08 9C C8 02 10 05 62 06 08 9D C8 02 10 04 62 06 08 9E C8 02 10 05 62 06 08 9F C8 02 10 05 62 06 08 A0 C8 02 10 03 62 06 08 A1 C8 02 10 04 62 06 08 A2 C8 02 1005 62 06 08 A3 C8 02 10 06 62 06 08 A4 C8 02 10 03 62 06 08 A5 C8 02 10 02 62 06 08 A6 C8 02 10 03 62 06 08 A7 C8 02 10 03 62 06 08 A8 C8 02 10 05 62 06 08 A9 C0 02 10 07 62 06 08 AA C0 02 10 07 62 06 08 AB C0 02 10 07 62 06 08 AC C0 02 1007 62 06 08 AD C0 02 10 06 62 06 08 AE C0 02 10 05 62 06 08 AF C0 02 10 06 62 06 08 B0 C0 02 10 06 62 06 08 B1 C0 02 10 05 62 06 08 B2 C0 02 10 07 62 06 08 B3 C0 02 10 07 62 06 08 B4 C0 02 10 08 62 06 08 B5 C0 02 10 07 62 06 08 B6 C0 02 10 07 62 06 08 B7 C0 02 10 08 62 06 08 B8 C0 02 10 07 62 06 08 B9 C0 02 10 06 62 06 08 BA C0 02 10 06 62 06 08 BB C0 02 10 07 62 06 08 BC C0 02 1007 62 05 08 D3 0F 10 01 62 05 08 D4 0F 10 01 62 06 08 E1 D7 02 10 01 62 06 08 E6 D7 02 10 01 62 06 08 EC D7 02 10 01 62 06 08 ED D7 02 10 01 62 06 08 F0 D7 02 10 01 62 06 08 FA CF 02 10 03 62 06 08 FB CF 02 10 02 62 06 08 FC CF 02 10 03 6206 08 FD CF 02 10 01 62 06 08 FE CF 02 10 02 62 06 08 FF CF 02 10 01 68 00 72 0A 08 C0 17 10 FE 88 B0 A4 AB 32 7A 0E 08 E2 83 86 B8 C0 5A 10 B5 E5 08 18 96 4E 88 01 00"

*/
//妖盟-查看仙居信息结果
func ParaXianjuInfo(dataBytes []byte) D.XianjuInfo {
	var allInfo D.XianjuInfo
	data := BytesToHexStr(dataBytes)
	// 定义正则表达式                   1 等级				          2 繁荣度
	re0 := regexp.MustCompile(`20([0-9A-F]{2})2A[0-9A-F]{2}((?:3[0-9])+?)30[0-9A-F]{2}38`)
	res0 := re0.FindAllStringSubmatch(data, -1)
	if len(res0) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	if len(res0) > 0 && len(res0[0]) > 0 {
		allInfo.Level = int(OneByteHexStrToByte(res0[0][1])) //等级
		allInfo.Prosperity = HexDataStrToInt64(res0[0][2])   //繁荣度
	}
	// 定义正则表达式                                               1 ID                   2类型          3 纵坐标        4 横坐标        5 状态                      6 等级                             7 时间                         8 数量
	re := regexp.MustCompile(`1A[0-9A-F]{2}0A[0-9A-F]{2}08((?:[0-9A-F]{2}){1,3})10([0-9A-F]{4})18([0-9A-F]{2})20([0-9A-F]{2})28([0-9A-F]{2})12[0-9A-F]{2}08([0-9A-F]{2})10(?:[0-9A-F]{2})+?20([0-9A-F]{12}|00)30[0-9A-F]{2}40((?:[0-9A-F]{2}){1,3})50`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	// 打印结果
	for _, regRes := range res {
		info := D.XianjuItemInfo{
			ID:     regRes[1], //ID
			Type:   regRes[2],
			Y:      OneByteHexStrToByte(regRes[3]),      //纵坐标
			X:      OneByteHexStrToByte(regRes[4]),      //横坐标
			Status: OneByteHexStrToByte(regRes[5]),      //状态
			Level:  int(OneByteHexStrToByte(regRes[6])), //等级
			Time:   ParaHexStrToTimeMs(regRes[7]),       //时间
			Num:    regRes[8],                           //数量
		}
		log.Debugf("%+v", info)
		allInfo.Items = append(allInfo.Items, info)
	}
	log.Debugf("%+v", allInfo)
	return allInfo
}

// 妖盟-查看仙居商品的结果
func ParaXianjuGoodsInfo(dataBytes []byte) (int64, []D.XianjuGoodsInfo) {
	var linCao int64
	var allInfo []D.XianjuGoodsInfo
	data := BytesToHexStr(dataBytes)

	// 定义正则表达式                   	          1 商品ID			   2 商品数量
	re0 := regexp.MustCompile(`12[0-9A-F]{2}((?:3[0-9])+)1A[0-9A-F]{2}08`)
	res0 := re0.FindAllStringSubmatch(data, -1)
	if len(res0) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	if len(res0) > 0 && len(res0[0]) > 0 {
		linCao = HexDataStrToInt64(res0[0][1])
		log.Debugf("灵草数量-%d", linCao)
	}

	// 定义正则表达式                   	          1 商品ID			   2 商品数量
	re := regexp.MustCompile(`1A[0-9A-F]{2}08([0-9A-F]{4})1810`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	resI := re.FindAllStringSubmatchIndex(data, -1)
	for idx, regRes := range res {
		info := D.XianjuGoodsInfo{
			ID:  regRes[1],                           //物品ID
			IDi: int(ParaIntDataByHexStr(regRes[1])), //物品ID
		}
		startIdx := resI[idx][0] / 2
		len := int(dataBytes[startIdx+1]) - 5
		info.Num = ParaIntData(dataBytes[startIdx+7 : startIdx+7+len]) //物品数量
		//log.Infof("%+v", info)
		allInfo = append(allInfo, info)
	}
	return linCao, allInfo
}

// 查看仙居协助的结果
func ParaXianjuAssistanceInfo(dataBytes []byte) []D.XianjuAssistanceInfo {
	var allInfo []D.XianjuAssistanceInfo
	if len(dataBytes) < 5 {
		return allInfo
	}
	data := BytesToHexStr(dataBytes)
	// 定义正则表达式                                                                                         1 id                                                     2 名字         3                        4                      5
	re := regexp.MustCompile(`12(?:[0-9A-F]{2}){1,2}0A(?:[0-9A-F]{2}){1,2}0A(?:[0-9A-F]{2}){1,2}08([0-9A-F]{12})10(?:[0-9A-F]{2}){3,10}1A[0-9A-F]{2}((?:[0-9A-F]{2})+?)20((?:[0-9A-F]{2})+?)28((?:[0-9A-F]{2}){1,2})30((?:[0-9A-F]{2}){1,2})38`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	for _, regRes := range res {
		info := D.XianjuAssistanceInfo{}
		info.ID = regRes[1]
		info.Name = HexDataStrToStr(regRes[2]) //名字
		info.Res1 = regRes[4]
		info.Res2 = regRes[5]
		log.Infof("%+v", info)
		allInfo = append(allInfo, info)
	}
	return allInfo
}

// 妖盟-查看仙居等级的结果
func ParaXianjuLevelInfo(dataBytes []byte) D.XianjuLevelInfo {
	info := D.XianjuLevelInfo{}
	data := BytesToHexStr(dataBytes)
	// 定义正则表达式                                1繁荣度             2 i等级
	re := regexp.MustCompile(`0A0[0-9A-Fa-f]((?:3[0-9])+?)10([0-9A-Fa-f]{2})`)
	regRes := re.FindAllStringSubmatch(data, -1)
	if len(regRes) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	// 打印结果
	if len(regRes) > 0 && len(regRes[0]) > 0 {
		info.Prosperity = HexDataStrToInt64(regRes[0][1])   //繁荣度
		info.Level = int(OneByteHexStrToByte(regRes[0][2])) //等级
	}
	return info
}

/*
[DEBUG] [2024/10/11 22:20:36] [PRJ/websocket_apn/main_test.go]:[  195]:   ↓↓↓↓↓ S_YARDPB_MERCHANT_INFO_RSP - len:38
[DEBUG] [2024/10/11 22:20:36] [PRJ/websocket_apn/main_test.go]:[  200]:   PayloadBytes: 71 AB 00 00 00 26 00 00 3D DB 00 00 02 D4 07 01 81 E2 08 00 12 07 08 83 B5 18 10 98 01 12 07 08 88 B5 18 10 BA 01
71 AB 00 00 00 26 00 00 3D DB 00 00 02 D4 07 01 81 E2 08 00
12 07 08 83 B5 18 10 98 01
12 07 08 88 B5 18 10 BA 01

*/
//妖盟-查看仙居售卖的结果
func ParaXianjuPriceInfo(dataBytes []byte) []D.XianjuPriceInfo {
	var allInfo []D.XianjuPriceInfo
	data := BytesToHexStr(dataBytes)
	// 定义正则表达式                              1物品ID     2 物品活动价格
	re := regexp.MustCompile(`120[0-9A-F]08([0-9A-F]{4})18`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	for _, regRes := range res {
		info := D.XianjuPriceInfo{
			IDi:    int(ParaIntDataByHexStr(regRes[1])), //物品ID
			APrice: int(ParaIntDataByHexStr(regRes[1])), //物品活动价格
		}
		allInfo = append(allInfo, info)
	}
	return allInfo
}

/*
[DEBUG] [2024/10/11 22:03:25] [PRJ/websocket_apn/main_test.go]:[  195]:   ↓↓↓↓↓ S_YARDPB_BUILD_GAIN_REWARD_RSP - len:31
[DEBUG] [2024/10/11 22:03:25] [PRJ/websocket_apn/main_test.go]:[  200]:   PayloadBytes: 71 AB 00 00 00 1F 00 00 3D D3 00 00 02D4 07 01 81 E2 08 00 12 09 34 30 30 30 30 37 3D 32 33
[DEBUG] [2024/10/11 22:03:25] [PRJ/websocket_apn/main_test.go]:[  206]:   	>>> 1 - code 08[8] len:0-_
[DEBUG] [2024/10/11 22:03:25] [PRJ/websocket_apn/main_test.go]:[  206]:   	>>> 2 - code 12[18] len:9-34 30 30 30 30 37 3D 32 33_
400007=23

*/

/*
//收到炼丹炉数据
S_YARDPB_BUILD_MAKE_NUM_SYNC_RSP - len:117
PayloadBytes: 71 AB 00 00 00 75 00 00 3D E9 00 00 02D4 07 01 81 E2 08 9F F8 02 12 05 39 31 35 34 30 1A 06 08 81 B5 18 10 00 1A 06 08 84 B5 18 10 00 1A 06 08 85 B5 18 10 00 1A 06 08 86 B5 18 10 00 1A 06 08 87 B5 18 10 00 1A 06 08 88 B5 18 10 00 1A 06 08 89 B5 18 10 00 1A 06 08 8A B5 18 10 001A 06 08 8B B5 18 10 00 1A 06 08 8C B5 18 10 00 1A 06 08 8D B5 18 10 00

*/
